The present invention relates generally to a system providing methods for facilitating development of software programs, with particular emphasis on decreasing the time a programmer spends creating or modifying source code during program development.
Before a digital computer may accomplish a desired task, it must receive an appropriate set of instructions. Executed by the computer's microprocessor, these instructions, collectively referred to as a "computer program," direct the operation of the computer. Expectedly, the computer must understand the instructions which it receives before it may undertake the specified activity.
Owing to their digital nature, computers essentially only understand "machine code," that is, the low-level, minute instructions for performing specific tasks--the sequence of ones and zeros that are interpreted as specific instructions by the computer's microprocessor. Since machine language or machine code is the only language computers actually understand, all other programming languages represent ways of structuring "human" language so that humans can get computers to perform specific tasks.
While it is possible for humans to compose meaningful programs in machine code, practically all software development today employs one or more of the available programming languages. The most widely-used programming languages are the "high-level" languages, such as C or Pascal, or more recently Java. These languages allow data structures and algorithms to be expressed in a style of writing which is easily read and understood by fellow programmers.
A program called a "compiler" translates these instructions into the requisite machine language. In the context of this translation, the program written in the high-level language is called the "source code" or source program. The ultimate output of the compiler is a compiled module such as a compiled C "object module," which includes instructions for execution ultimately by a target processor, or a compiled Java class, which includes opcode instructions for execution ultimately by a Java virtual machine. Although a compiled module includes code for instructing the operation of a computer, such a module itself is typically not in a form which may be directly executed by a computer. In other words, it does not form the final program which is executable on a computer. Instead, it must undergo a "linking" operation before the final executable program is created.
Linking may be thought of as the general process of combining or linking together one or more compiled object modules to create an executable program. This task usually falls to a program called a "linker." In typical operation, a linker receives, either from the user or from an integrated compiler, a list of object modules desired to be included in the link operation. The linker scans the object modules from the object and library files specified. After resolving interconnecting references as needed, the linker constructs an executable image by organizing the object code from the modules of the program in a format understood by the operating system program loader. The end result of linking is executable code (such as an .exe file) which, after testing and quality assurance, is passed to the user with appropriate installation and usage instructions.
Increasingly, the traditional programming tools (i.e., integrated editor/compiler/debugger developer tools) have evolved into visual rapid application development or "RAD" tools which deliver component-based programming. Instead of writing code from scratch, a programmer creates a program by assembling existing components or controls. Basically, the programmer "drags" existing (standard) components or objects onto a form and then attaches program code to those objects. By decreasing the need to write code, these tools have improved programmer productivity.
Even with all the assistance that a modern visual RAD environment affords, software development still remains a slow process. Development of a program of even modest complexity requires a substantial amount of "coding"--that is, crafting source code by hand. Although much progress has been made in eliminating the need to write code for program elements which can be represented as objects, particularly user interface objects, little has been done to date to help programmers with the task of creating program logic which must be coded. Although components can be visually placed on a form, there still exists a need to write custom code to handle events which arise from those components. To add handler code for a component visually added to a form, for instance, a programmer must have some understanding of the methods, properties, and events for that component. If the programmer selects a particular method of the component, he or she might have to provide required values, including parameter and return values.
What is needed is a system with methods for assisting a programmer with the task of actually creating source code, including custom program code which must be added by the programmer. Such a system should enable the programmer to easily add code to components which the programmer knows little about, all without requiring the programmer to refer to header files or other source files for those components. The present invention fulfills this and other needs.